home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / MYMUD21.ZIP / MMUD21.ZIP / SOURCE / 11_STUFF.ZIP / ML_IO.ZIP / VGAFONT.PAS < prev   
Pascal/Delphi Source File  |  1992-10-12  |  2KB  |  99 lines

  1. Unit VGAFont;
  2. Interface
  3. Uses Dos,Crt;
  4.  
  5. Function IsVGAorEGA:Boolean;
  6. Procedure ResetVGAfont;
  7. Function LoadVGAFont(FileName : ComStr):Boolean;
  8.  
  9. Implementation
  10.  
  11. Var SetSize : Word;
  12.     Points  : Byte;
  13.     OrigMode: Integer;
  14.     CharSet : Pointer;
  15.     ExitSAve: Pointer;
  16.     FirstChange : Boolean;
  17.  
  18. {$F+}
  19. Procedure ResetVGAfont;
  20. {$F-}
  21. Var Regs : Registers;
  22. Begin
  23. ExitProc:=ExitSave;
  24. If CharSet<>NIL
  25.    Then Begin
  26.         FreeMem(CharSet,SetSize);
  27.         CharSet:=NIL;
  28.         End;
  29. With Regs Do
  30.  Begin
  31.  AX := $1104;
  32.  BL := 0;                             (* load to block 0 *)
  33.  Intr($10,Regs);
  34.  End; {With}
  35. End;
  36.  
  37. Function LoadVGAFont(FileName : ComStr):Boolean;
  38. Var Regs    : Registers;
  39.     F       : File;
  40.  
  41. Begin
  42. LoadVGAFont:=False;
  43. If CharSet<>NIL
  44.    Then Begin
  45.         FreeMem(CharSet,SetSize);
  46.         CharSet:=NIL;
  47.         End;
  48.  
  49. Assign(F,FileName);
  50. Reset(F,1);
  51. If IoResult<>0
  52.    Then Exit;
  53. SetSize:=FileSize(F);
  54. GetMem(CharSet,SetSize);
  55. BlockRead(F,CharSet^,SetSize);
  56. Close(F);
  57. If IoResult<>0
  58.    Then Exit;
  59. Points:=SetSize Div 256;
  60.  
  61. With Regs Do
  62.  Begin
  63.  AX := $1100;
  64.  BH := Points;                        (* bytes per character *)
  65.  BL := 0;                             (* load to block 0 *)
  66.  CX := 256;                           (* 256 characters *)
  67.  DX := 0;                             (* start with character 0 *)
  68.  ES := Seg(CharSet^);                 (* segment of table *)
  69.  BP := Ofs(CharSet^);                 (* offset of the table *)
  70.  Intr($10,Regs);
  71.  End; {With}
  72. LoadVGAFont:=True;
  73. End;
  74.  
  75. Function IsVGAorEGA:Boolean;
  76. Var Regs : Registers;
  77. Begin
  78. With REgs Do
  79.  Begin
  80.  AX:=$1007;
  81.  BX:=$0000;
  82.  Intr($10,Regs);
  83.  IsVGAorEGA:=(Regs.Flags and FCarry)<>FCarry;
  84.  End; {With}
  85. End;
  86.  
  87. Var Regs : Registers;
  88.  
  89. Begin
  90. ExitSave:=ExitProc;
  91. ExitProc:=@ResetVGAFont;
  92. CharSet:=Nil;
  93. OrigMode:=LastMode;
  94. Regs.AX := $0500;                 (* make sure that it's page 0 *)
  95. Intr($10,Regs);
  96. Regs.AX := 3;                     (* must set the vdo mode first *)
  97. Intr($10,Regs);
  98. End.
  99.